home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / appsrcs.zip / APPTASK.ZIP / APPTASK.C < prev    next >
C/C++ Source or Header  |  1993-03-17  |  8KB  |  255 lines

  1. /*-------------------------------------------------------------------------
  2.  AppTask.c
  3.  
  4.  A Task Manager.
  5.  
  6.  by
  7.  GMP van kempen
  8.  NEVERnever Software 1993
  9.  
  10. History:
  11.     4.00.1, first thing
  12.     4.00.2, added setup dialog box, Second Instance is not allowed, but will
  13.         send a WM_ACTIAVTE to first instance.
  14.  
  15. ---------------------------------------------------------------------------*/
  16.  
  17. //compile with the strictest error checking
  18. #define STRICT
  19. #include <windows.h>
  20. #include <windowsx.h>
  21. #include <shellapi.h>
  22. #include <ctl3d.h>
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include <string.h>
  26. #include "apptask.h"
  27.  
  28. #define MAKECHILD(a,b,c,d,e,f,g,h) CreateWindow(a,b,WS_CHILD | WS_VISIBLE | c,d,e,f,g,hWnd,h,hInst,(LPSTR) NULL)
  29. #define MAKEBUTTON(a,b,c,d,e,f)    MAKECHILD("button",a,BS_PUSHBUTTON,b,c,d,e,f)
  30. #define MAKELISTBOX(a,b,c,d,e)       MAKECHILD("listbox",NULL,LBS_NOTIFY | WS_BORDER | WS_VSCROLL,a,b,c,d,e)
  31. #define MAKESTATIC(a,b,c,d)       MAKECHILD("static",NULL,SS_BLACKRECT,a,b,c,d,(HMENU) -1)
  32. #define MAKEBORDER(a,b,c,d)       MAKECHILD("static",NULL,SS_WHITERECT,a,b,c,d,(HMENU) -1)
  33.  
  34. #define NORMALIZE(a)    ShowWindow(a,SW_SHOWNORMAL)
  35. #define ICONIZE(a)    ShowWindow(a,SW_SHOWMINNOACTIVE)
  36. #define MAXIMIZE(a)    ShowWindow(a,SW_MAXIMIZE)
  37.  
  38. #define MAXAPPS  64
  39.  
  40. char        szAppName[] = "AppTask";
  41. HINSTANCE   hInst;
  42. HWND        hWndAppTask, hWndListBox, hWndApp[MAXAPPS];
  43. BOOL        bSetupLaunched, bTaskMan = FALSE;
  44.  
  45. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  46.            LPSTR lpszCmdLine, int nCmdShow)
  47.     {
  48.     HWND    hWnd;
  49.     MSG     msg;
  50.     WNDCLASS    wndclass;
  51.     int     xScreen, yScreen, yCaption, xSize, ySize;
  52.  
  53.     if(!hPrevInstance)
  54.     {
  55.     wndclass.style            = CS_HREDRAW | CS_VREDRAW;
  56.     wndclass.lpfnWndProc        = WndProc;
  57.     wndclass.cbClsExtra        = 0;
  58.     wndclass.cbWndExtra        = 0;
  59.     wndclass.hInstance        = hInstance;
  60.     wndclass.hIcon            = LoadIcon(hInstance, szAppName);
  61.     wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
  62.     wndclass.hbrBackground        = GetStockBrush(LTGRAY_BRUSH);
  63.     wndclass.lpszMenuName        = NULL;
  64.     wndclass.lpszClassName        = szAppName;
  65.  
  66.     RegisterClass(&wndclass);
  67.     }
  68.     // allow only one instance at one time
  69.     else
  70.     {
  71.     //BringWindowToTop(hWndAppTask);
  72.     //SendMessage(hWndAppTask, WM_QUIT, 0, 0L);
  73.     return TRUE;
  74.     //hInstance = hPrevInstance;
  75.     }
  76.  
  77.     hInst = hInstance;
  78.  
  79.     xScreen = GetSystemMetrics(SM_CXSCREEN);
  80.     yScreen = GetSystemMetrics(SM_CYSCREEN);
  81.     yCaption = GetSystemMetrics(SM_CYCAPTION);
  82.  
  83.     Ctl3dRegister(hInstance);
  84.     Ctl3dAutoSubclass(hInstance);
  85.  
  86.     xSize = 275;
  87.     ySize = 163 + yCaption;
  88.  
  89.     hWnd = CreateWindow(szAppName, "AppTask 4.0",
  90.             WS_POPUP | WS_SYSMENU | WS_CAPTION |
  91.             WS_MINIMIZEBOX | WS_VISIBLE,
  92.             (xScreen - xSize)/2, yScreen/2 - ySize,
  93.             xSize, ySize,
  94.             NULL, (HMENU) NULL, hInstance, NULL);
  95.  
  96.     hWndAppTask = hWnd;
  97.  
  98.     ShowWindow(hWnd, SW_SHOWNORMAL);
  99.     UpdateWindow(hWnd);
  100.  
  101.     while(GetMessage(&msg, NULL, 0, 0))
  102.     {
  103.     TranslateMessage(&msg);
  104.     DispatchMessage(&msg);
  105.     }
  106.  
  107.     Ctl3dUnregister(hInstance);
  108.  
  109.     return msg.wParam;
  110.     } /* end WinMain */
  111.  
  112. /*------------------------------------------------------------------------/
  113.    FUNCTION: WndProc()
  114. /------------------------------------------------------------------------*/
  115. long WINAPI WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  116.     {
  117.     static DLGPROC lpfnSetupDlgProc;
  118.     char *FirstButton[3] = {"&Minimize","To&Front","M&aximize"};
  119.     char *SecondButton[3] = {"&Setup","&Cancel","&End Task"};
  120.     int i;
  121.     HBRUSH hbrush;
  122.     HWND hWndButton[6];
  123.  
  124.  
  125.     switch (message)
  126.     {
  127.     case WM_CREATE:
  128.         /* read ShowAll setting */
  129.         GetPrivateProfileString("AppTask", "ShowAll", "0", szBuffer, 255, "AppTools.ini");
  130.         ShowAll = ONEORZERO(atoi(szBuffer));
  131.  
  132.         /* read Close on deactivation setting */
  133.         GetPrivateProfileString("AppTask", "CloseDeAct", "0", szBuffer, 255, "AppTools.ini");
  134.         CloseDeAct = ONEORZERO(atoi(szBuffer));
  135.  
  136.         /* read CloseMode setting */
  137.         GetPrivateProfileString("AppTask", "CloseMode", "0", szBuffer, 255, "AppTools.ini");
  138.         CloseMode = WITHIN(atoi(szBuffer),0,2);
  139.  
  140.         // create static frame around text fields
  141.         Ctl3dSubclassCtl(MAKEBORDER(0, 0, 273, 162));
  142.         hWndListBox = MAKELISTBOX(10, 10, 255, 80, IDC_LISTBOX);
  143.         Ctl3dSubclassCtl(hWndListBox);
  144.         for(i=0;i<3;i++)
  145.         hWndButton[i] = MAKEBUTTON(FirstButton[i], 10+i*85, 100, 80, 24,
  146.                        IDC_BUTTONS+i);
  147.         for(i=0;i<3;i++)
  148.         hWndButton[i+3] = MAKEBUTTON(SecondButton[i], 10+i*85, 130, 80, 24,
  149.                        IDC_BUTTONS+i+3);
  150.         UpdateListBox(hWndListBox);
  151.         GetPrivateProfileString("boot", "taskman.exe", "  ", szBuffer, 255, "system.ini");
  152.         if(strstr(AnsiLower(szBuffer),"apptask.exe"))
  153.         bTaskMan = TRUE;
  154.         return 0;
  155.  
  156.     case WM_SYSCOLORCHANGE:
  157.            Ctl3dColorChange();
  158.        break;
  159.  
  160.     case WM_CTLCOLOR:
  161.         hbrush = Ctl3dCtlColorEx(message, wParam, lParam);
  162.         if(hbrush != (HBRUSH) FALSE)
  163.         return hbrush;
  164.         else
  165.         return DefWindowProc(hWnd, message, wParam, lParam);
  166.  
  167.        case WM_COMMAND:
  168.         switch(wParam)
  169.         {
  170.         case IDC_BUTTONS: /* minimize */
  171.             ICONIZE(hWndApp[ListBox_GetCurSel(hWndListBox)]);
  172.             break;
  173.  
  174.         case IDC_BUTTONS+1:  /* tofront */
  175.             if(IsIconic(hWndApp[ListBox_GetCurSel(hWndListBox)]))
  176.             NORMALIZE(hWndApp[ListBox_GetCurSel(hWndListBox)]);
  177.             BringWindowToTop(hWndApp[ListBox_GetCurSel(hWndListBox)]);
  178.             break;
  179.  
  180.         case IDC_BUTTONS+2: /* maximize    */
  181.             MAXIMIZE(hWndApp[ListBox_GetCurSel(hWndListBox)]);
  182.             SendMessage(hWnd, WM_DESTROY, 0, 0L);
  183.             break;
  184.  
  185.         case IDC_BUTTONS+3: /* setup */
  186.             bSetupLaunched = TRUE;
  187.             lpfnSetupDlgProc = (DLGPROC) MakeProcInstance(SetupDlgProc, hInst);
  188.             DialogBox(hInst, "SetupDlg", hWnd, lpfnSetupDlgProc);
  189.             FreeProcInstance((FARPROC) lpfnSetupDlgProc);
  190.             bSetupLaunched = FALSE;
  191.             UpdateListBox(hWndListBox);
  192.             break;
  193.  
  194.         case IDC_BUTTONS+4: /* cancel */
  195.             SendMessage(hWnd, WM_DESTROY, 0, 0L);
  196.             break;
  197.  
  198.         case IDC_BUTTONS+5: /* close task */
  199.             if(CloseMode == 0)
  200.             CloseApp(hWndApp[ListBox_GetCurSel(hWndListBox)]);
  201.             if(CloseMode == 1)
  202.             SendMessage(hWndApp[ListBox_GetCurSel(hWndListBox)], WM_DESTROY, 0, 0L);
  203.             if(CloseMode == 2)
  204.             SendMessage(hWndApp[ListBox_GetCurSel(hWndListBox)], WM_QUIT, 0, 0L);
  205.             UpdateListBox(hWndListBox);
  206.             break;
  207.         }
  208.         break;
  209.  
  210.        case WM_ACTIVATE:
  211.         if((wParam == WA_ACTIVE) || (wParam == WA_CLICKACTIVE))
  212.         UpdateListBox(hWndListBox);
  213.         if((wParam == WA_INACTIVE) && CloseDeAct && !bSetupLaunched)
  214.         SendMessage(hWnd, WM_DESTROY, 0, 0L);
  215.         if((wParam == WA_INACTIVE) && bTaskMan && !bSetupLaunched)
  216.         SendMessage(hWnd, WM_DESTROY, 0, 0L);
  217.         return 0;
  218.  
  219.        case WM_ACTIVATEAPP:
  220.         UpdateListBox(hWndListBox);
  221.         return 0;
  222.  
  223.        case WM_DESTROY:    // kill the whole program
  224.         PostQuitMessage(0);
  225.         return 0;
  226.     }
  227.     return DefWindowProc(hWnd, message, wParam, lParam);
  228.     } /* end WndProc */
  229.  
  230. /*--------------------------------------------------------------------------*/
  231. void UpdateListBox(HWND hWndListBox)
  232.     {
  233.     HWND hWhatEver = GetActiveWindow();
  234.     char szWinText[256];
  235.     int i = 0;
  236.  
  237.     ListBox_ResetContent(hWndListBox);
  238.     while ((hWhatEver != NULL) && ( i < MAXAPPS))
  239.     {
  240.     if(IsWindowVisible(hWhatEver) || ShowAll)
  241.         {
  242.         if(GetWindowText(hWhatEver, (LPSTR) szWinText, 255) != 0)
  243.         {
  244.         if(strstr(szWinText, "AppTask 4.0") == NULL)
  245.             {
  246.             hWndApp[i++] = hWhatEver;
  247.             ListBox_InsertString(hWndListBox, szWinText, -1);
  248.             }
  249.         }
  250.         }
  251.     hWhatEver = GetWindow(hWhatEver, GW_HWNDNEXT);
  252.     }
  253.     ListBox_SetCurSel(hWndListBox, 0);
  254.     }
  255.